package com.jackstraw.dbtool.utils;

import java.util.HashMap;
import java.util.Map;

/**
 * 所在包：com.wenhe.backTemplate.utils
 * 文件名：
 * 版权：稻草人.
 * 项目：backTemplate
 * 功能描述：
 * 修改人：wenhe
 * 修改时间：2019-11-05 16:21
 */
public class DBToJavaParamTypeMap {

    /**
     * 变量类型对应的键值对
     *      数据库变量全初始化为小写
     */
    private static Map<String, String> map = null;

    /**
     * 根据数据库类型生成不同的转换map
     * @param dbType
     */
    public static void initTransMap(String dbType) {
        switch (dbType) {
            case "mysql":
                initMysqlMap();
                break;
            case "oracle":
                initOracleMap();
                break;
            case "sqlServer":
                initSqlServerMap();
                break;
            default:
                throw new RuntimeException("当前数据库未添加到兼容！");
        }
    }

    /**
     * 根据mysql字段类型获取对应的java类型
     * @param mysqlColumnType
     * @return
     */
    public static String getJavaParamType(String mysqlColumnType) {
        // 默认初始化mysql数据库
        if (map == null)
            initTransMap("mysql");
        // 判断当前数据库类型是否为空
        if (MyStringUtil.isEmpty(mysqlColumnType))
            return "String";
        mysqlColumnType = mysqlColumnType.toLowerCase();
        String javaParamType = map.get(mysqlColumnType);
        if (javaParamType == null)
            System.out.println("> > > > > > > > > > 当前数据类型尚未添加控制："+mysqlColumnType);
        return javaParamType;
    }

    /**
     * 初始化mysql转换map
     */
    private static void initMysqlMap() {
        map = new HashMap<>();
        map.put("bigint", "Long");
        map.put("varchar", "String");
        map.put("int", "Integer");
        map.put("tinyint", "Integer");
        map.put("decimal", "BigDecimal");
        map.put("text", "String");
        map.put("datetime", "Date");
        map.put("date", "Date");
        map.put("double", "Double");
        map.put("int unsigned", "Integer");
        map.put("bit", "Integer");
        map.put("timestamp", "Long");
    }

    /**
     * 初始化oracle转换map
     */
    private static void initOracleMap() {
        throw new RuntimeException("Oracle还没加入！");
    }

    /**
     * 初始化mysql转换map
     */
    private static void initSqlServerMap() {
        map = new HashMap<>();
        map.put("bigint", "Long");
        map.put("bigint identity", "Long");
        map.put("varchar", "String");
        map.put("int", "Integer");
        map.put("tinyint", "Integer");
        map.put("decimal", "BigDecimal");
        map.put("text", "String");
        map.put("ntext", "String");
        map.put("varbinary", "String");
        map.put("char", "String");
        map.put("datetime", "Date");
        map.put("date", "Date");
        map.put("double", "Double");
        map.put("int unsigned", "Integer");
        map.put("bit", "Integer");
        map.put("timestamp", "Long");
        map.put("numeric", "BigDecimal");
        map.put("int identity", "Integer");
        map.put("nvarchar", "String");
        map.put("smallint", "Integer");
    }
}
